#ifndef NODELISTENER_H
#define NODELISTENER_H

#include "bga/system/Listener.h"
#include "bga/system/NodeEvent.h"

/**
 * \namespace bga
 * \brief API namespace
 */
namespace bga
{

/**
 * \brief This class defines a listener on a node
 */
class BOARD_HELL_ENGINE NodeListener : public Listener
{
	public:

        /*!
         * \brief Function to handle an addition of a Node in a tree
         * \param event : NodeEvent containing the node added and the informations relative to this addition
         *
         * Function to handle an addition of a Node in a tree. This function is abstract.
         */
        virtual void nodeAdded(const NodeEvent& nodeEvent) = 0;

        /*!
         * \brief Function to handle a removal of a Node in a tree
         * \param event : NodeEvent containing the node removed and the informations relative to this removal
         *
         * Function to handle an removal of a Node in a tree. This function is abstract.
         */
		virtual void nodeRemoved(const NodeEvent& nodeEvent) = 0;

        /*!
         * \brief Function to handle a modification of a Node in a tree
         * \param event : NodeEvent containing the node modified and the informations relative to this modification
         *
         * Function to handle a modification of a Node in a tree. This function is abstract.
         */
		virtual void nodeModified(const NodeEvent& nodeEvent) = 0;

        /*!
         * \brief Function to handle a node when it is processed
         * \param event : NodeEvent containing the node to process and the informations relative to this modification
         *
         * Function to handle a process of a Node in a tree. This function is abstract.
         */
		virtual void nodeProcessed(const NodeEvent& nodeEvent) = 0;

	protected:

	private:

};


}

#endif // NODELISTENER_H

